#include <stdio.h>

// 非常经典的逻辑学的问题,相信各位应该也都都在脑筋急转弯里面做过吧
// 但是呢,这道题其实在计算机算法上,并不能按照人类通常的思路来编写代码

int main ()
{

    char cheater = 'A' ;

    for ( ; cheater <= 'D' ; cheater++)
    {

        if ((cheater != 'A') + (cheater == 'C') + (cheater == 'D') + (cheater != 'D') == 3) // 说假话的判断语句,但其他三个条件满足的时候,剩下那个就是说假话的那个
        {
            
            break ;

        }

    }

    printf ("凶手是: %c" , cheater) ;

    return 0 ;

}

// 这边来对这道题目做一个详细的解析

// 题目的条件是: A B C D 里面,只有一个是假的

// 这样,如果我们把真的表示为1,而假表示为0

// 那我们可以通过逻辑运算来得出是否矛盾

// 那就有四种情况:

// 1.如果A是假话,那: 0110

// 2.如果B是假话,那: 1000 / 1001 / 1010

// 3.如果C是假话,那: 1101

// 4.如果D是假话,那: 1010

// 我们可以发现,四种情况下,只有一种情况是满足其余三个人是说真话的情况,所以可以判断为C在说假话